package susebs.pb.travel_server.controller;

import susebs.pb.travel_server.domain.PageDto;
import susebs.pb.travel_server.domain.Result;
import susebs.pb.travel_server.entity.Orders;
import susebs.pb.travel_server.service.OrdersService;
import org.springframework.web.bind.annotation.*;
import susebs.pb.travel_server.utils.TimeFormatUtil;

import javax.annotation.Resource;

/**
 * 订单表(Orders)表控制层
 *
 * @author makejava
 * @since 2024-02-09 19:19:48
 */
@RestController
@RequestMapping("/orders")
@CrossOrigin
public class OrdersController {
    /**
     * 服务对象
     */
    @Resource
    private OrdersService ordersService;

    /**
     * 订单id查询
     */
    @GetMapping("/queryById")
    public Result queryById(Long orderId){
        Orders order = ordersService.queryById(orderId);
        if(order.getOrderId() == null)return Result.buildFail("没有数据！");

        Result<Orders> res = Result.buildSuccess(order);
        res.add("formattedTime", TimeFormatUtil.timeFormat(order.getOrderCreateTime()));
        return res;
    }

    /**
     * 分页查询
     * @param pageDto 订单数据+分页数据
     * @return 符合条件的订单列表
     */
    @PostMapping("/queryByPage")
    public Result queryByPage(@RequestBody PageDto pageDto) {
        return Result.buildSuccess(ordersService.queryAllOrdersByPage(pageDto));
    }


    /**
     * 用户下单
     * 请求时机：用户完成下单后之后（模拟：点击“下单”时）
     * @param order 订单数据
     * @return 成功：订单数据；失败：返回消息
     * status:0
     */
    @PostMapping("/insertOrder")
    public Result insertOrder(@RequestBody Orders order){
        Orders order1 = ordersService.insert(order);
        if(order1.getOrderId() == null){
            return Result.buildFail("请传递参数：交易类型及关联id！ \n 交易类型传参说明：1景点，2平台套餐，3酒店");
        }
        Result<Object> res = Result.buildSuccess(order1);
        res.add("formattedTime", TimeFormatUtil.timeFormat(order1.getOrderCreateTime()));
        return res;
    }

    /**
     * 取消订单
     * 请求时机：用户进入订单表，点击“取消订单”时
     * @param orderId 取消订单id
     * @return 取消订单数据（可以不需要）
     * status:1
     */
    @GetMapping("/cancelOrder")
    public Result cancelOrder(Long orderId){
        Orders res = ordersService.cancelOrder(orderId);
        return Result.buildSuccess(res);
    }

    /**
     * 用户支付
     * 请求时机：用户支付完成后（模拟：点击“完成支付”时）
     * @param orderId 支付订单id
     * @return 支付订单数据（可以不需要）
     * status:2
     */
    @GetMapping("/completePayment")
    public Result completePayment(Long orderId){
        Orders res = ordersService.completePayment(orderId);
        return Result.buildSuccess(res);
    }

    /**
     * 用户退款
     * 请求时机：用户请求退款时（点击“确认退款”时）
     * @param orderId 退款订单id
     * @return 退库看订单数据（可以不需要）
     * status:3
     */
    @GetMapping("/cancelPayment")
    public Result cancelPayment(Long orderId){
        Orders res = ordersService.cancelPayment(orderId);
        return Result.buildSuccess(res);
    }

    /**
     * 订单完成
     * 请求时机：用户订单完成后（模拟：点击“完成订单”时）
     * @param orderId 完成订单id
     * @return 完成订单数据（可以不需要）
     * status:5
     */
    @GetMapping("/completeOrder")
    public Result completeOrder(Long orderId){
        Orders res = ordersService.completeOrder(orderId);
        if(res.getOrderId() == null){
            return Result.buildFail("参数缺失！【可能是type/id缺失】");
        }
        return Result.buildSuccess(res);
    }

    //管理
    //删
    @GetMapping("/deleteById")
    public Result deleteById(Long orderId){
        boolean delete = ordersService.deleteById(orderId);
        if(delete)return Result.buildSuccess();
        return Result.buildFail("删除失败！");
    }


































}

